home *** CD-ROM | disk | FTP | other *** search
/ Atari Forever 4 / Atari Forever 4.zip / Atari Forever 4.iso / PD_THEMA / ASSEMBLR / ASS_6502 / ASS_6502.TXT < prev   
Text File  |  1998-03-14  |  16KB  |  499 lines

  1.  
  2.  
  3.                ASS_6502   65(c)02 Cross-Makro-Assembler
  4.  
  5.  
  6.  Ass_6502 dient der Erstellung von Programmen der 65xx Prozessoren auf
  7.  dem Atari ST. Geschrieben habe ich dieses Programm, um auf meine Atari
  8.  Programme für einen kleinen Einplatinencomputer zu entwickeln. Die
  9.  vorliegende Version ist mindestens schon die dritte, und mittlerweile
  10.  vollständig in Assembler geschrieben, wodurch, wie ich meine,er eine 
  11.  ganz gute Geschwindigkeit erreicht. Es sollten die meisten Fehler
  12.  beseitigt sein, was aber nicht heißen soll, das es vielleicht doch
  13.  noch einige gibt. Es ist mir nämlich nicht möglich, rein zeitlich
  14.  gesehen, alle möglichen und umnmöglichen Test durzuführen, aber wenn
  15.  man ihn nicht provoziert, läuft er sehr gut. Sollten sie trotzdem Fehler
  16.  entdecken, so zögern sie nicht, diese mir mitzuteilen. Ich werde versuchen,
  17.  sie dann zu beseitigen. Für Anregungen bin ich auch sehr aufgeschlossen.
  18.  
  19.  Anregungen,Wünsche und Kritik, letzteres hoffentlich konstruktiv, wenden
  20.  sie sich an :
  21.  
  22.  Alexander Stauffenberg
  23.  Buchsweilerstr. 8
  24.  1000 Berlin 33
  25.  (030)8313277
  26.  
  27. ===============================================================================
  28.  
  29.  Aufruf des Assemblers
  30.  
  31.  Aufruf : ASS_6502 [ Optionen ... ... ] Quelldatei [ Zieldatei ]
  32.  
  33.  Die verschiedenen Parameter müssen durch ein Leerzeichen getrennt sein.
  34.  
  35.  Optionen beginnen mit den Zeichen '-'. Es können mehrere Optionen durch ein 
  36.  Leerzeichen getrennt angegeben werden. Es gibt folgende Optionen :
  37.  
  38.  -B       -> Falls möglich werden JMP Befehle in BRA umgewandelt. Diese Option
  39.              ist nur im 65c02 Modus wirksam.
  40.  
  41.  -C       -> Schaltet den 65c02 Modus ein, d.h. Befehle der 65c02 CPU sind 
  42.              zulässig.
  43.   
  44.  -E       -> Bei Ausgabe eines Listings, werden Include Files mitgelistet.
  45.  
  46.  -H       -> Der Assembierte Code wird als Hexstring ausgegeben. Die ersten
  47.              vier Zeichen geben Startadresse ( Low Byte, High Byte ) an, die 
  48.              vier die Endadresse. Darauf folgt der Code in ASCII Zeichen.
  49.              Wird diese Option nicht angegeben, so wird der Code Binär abge-
  50.              speichert. Binärer Code erhält ( falls nicht anders angegeben )
  51.              die Extension *.65, ASCII Code *.H65.
  52.  
  53.  -Z       -> Es werden keine kurzen Adressierung mehr verwendet.
  54.  
  55.  -F=Datei -> Es werden die Fehlermeldungen in 'Datei' geschrieben. Das Programm
  56.              wartet nicht mehr auf Tastendruck, und es endet mit Fehlercode 1. 
  57.              Wird diese Option nicht angegeben, so fragt das Programm im Fehler-
  58.              fall, wohin die Meldungen geschrieben werden sollen.
  59.        
  60.  -L=Datei -> Es wird ein Listing in 'Datei' ausgegeben. 
  61.  
  62.  -S=Datei -> Es wird eine Symbolliste in 'Datei' ausgegeben.
  63.  
  64.  Als Quelldatei muß der Name des Quelltextes angegeben werden.
  65.  
  66.  Zusätzlich kann eine Zieldatei angegeben werden. Wird diese nicht angegeben,
  67.  so bildet sich der Name der Zieldatei aus dem Name der Quelldatei mit der
  68.  Extension .65 oder .H65 ( s.o. ).
  69.  
  70.  Werden  die Optionen im Quelltext anders angegeben, so haben diese Vorrang. 
  71.  
  72. ===============================================================================
  73.  
  74.  Quelldatei
  75.  
  76.  Die Quelldatei kann mit jedem beliebigen ASCII Editor erstellt werden.
  77.  
  78. ===============================================================================
  79.  
  80.  Textfelder
  81.  
  82.  Symbole beginnen immer in der ersten Spalte. Alle weiteren Felder können
  83.  an einer beliebigen Spalte beginnen. Getrennt werden sie durch
  84.  Leerzeichen oder Tabulatoren.
  85.  
  86.  z.B
  87.  
  88.  Label   lda  #$FF  ; Kommentar  -> Richtig
  89.  Label   lda  # $ff  ; Kommentar -> Falsch ! $ff wird als viertes Feld
  90.                                              erkannt, d.h. als Kommentar
  91.  
  92. ===============================================================================
  93.  
  94.  Symbole
  95.  
  96.  Symbole oder Labels müssen immer in der ersten Spalte beginnen.
  97.  Symbole müssen immer mit einen Buchstaben beginnen. Danach sind
  98.  Buchstaben, Ziffern und '_' erlaubt.
  99.  Der Assembler benutzt alle Zeichen eines Symbols zur unterscheidung.
  100.  Es wird auch zwischen Groß- und Kleinschreibung unterschieden.
  101.  
  102.  Z.B.  'LABEL' ist nicht gleich zu 'label'
  103.  
  104. ================================================================================
  105.  
  106.  Mnemonic
  107.  
  108.  Alle Mnemonic der 8 Bit 65xx Prozessoren sind zugelassen.
  109.  Mnemonics können sowohl in Großschrift, als auch in Kleinschrift
  110.  geschrieben werden.
  111.  
  112.  Z.B. 'Lda'  ist genauso zulässig wie 'LDA' oder 'lda'.
  113.  
  114. ===============================================================================
  115.  
  116.  Operanden
  117.  
  118.  Register können sowohl als 'A','X','Y' angegeben werden, als auch
  119.  als 'a','x','y'. Bei Hexadezimalen Zahlen sind sowohl Groß- als auch
  120.  Kleinschrift zulässig.
  121.  
  122. -------------------------------------------------------------------------------
  123.  
  124.  Ausdrücke im Operanden
  125.  
  126.  Zahlen können in dezimaler,hexadezimaler und binärer Darstellung angegeben
  127.  werden. '$' leiten hexadezimale, '%' binäre Zahlen ein.
  128.  
  129.  z.B.      1234  =  1234 (logisch ! )
  130.            $ff   =  255
  131.            %1111 =  15
  132.  
  133.  
  134.  Eine Zahl oder ein Symbol gefolgt von '.h' oder '.H' liefert das höherwertige
  135.  Byte. ( Zahl DIV 256 )
  136.  Eine Zahl oder ein Symbol gefolgt von '.l' oder '.L' liefert das niederwertige
  137.  Byte. ( Zahl MOD 256 )
  138.  
  139.  z.B.      $1234.h = $12
  140.            $1234.l = $34
  141.  
  142. -------------------------------------------------------------------------------
  143.  
  144.  Rechenausdrücke
  145.  
  146.  Innerhalb des Operanden können Rechenausdrücke stehen. Es stehen +,-,* und
  147.  / zur Verfügung. Es wird stur von links nach rechts gerechnent, d.h. es
  148.  wird keine Priorität berücksichtigt. Klamern von Ausdrücken ist ebenfalls
  149.  nicht möglich. Es findet kein Überlaufprüfung statt.
  150.  Komplizierte Ausdrücke sollte man daher meiden.
  151.  
  152. ===============================================================================
  153.  
  154.  Kommentare
  155.  
  156.  Kommntare stehen im vierten Textfeld oder beginnen mit ';'. Alle Zeichen
  157.  die einen ';' folgen werden überlesen.
  158.  
  159.  z.B.   Label  Mne  Operand    Kommentar
  160.         Label  Mne  Operand    ; Kommentar
  161.         Label  Mne             ; Kommentar
  162.         ; Kommentar
  163.  
  164. ===============================================================================
  165.  
  166.  Codedatei
  167.  
  168.  Der vom Assembler erzeugte Code wird als Binärdatei abegespeichert,
  169.  d.h. es werden keine Zusatzinformation abgespeichert. Deswegen sollte
  170.  man sich die Startadresse des Codes gut meren.
  171.  Die Datei kann als solche direckt in ein EPROM gebrannt werden.
  172.  
  173.  Falls gewünscht wird der Code auch als ASCII ausgegeben werden. Die ersten
  174.  vier Zeichen geben Startadresse ( Low Byte, High Byte ) an, die 
  175.  vier die Endadresse. Darauf folgt der Code in ASCII Zeichen.
  176.  
  177. ===============================================================================
  178.  
  179.  Listing
  180.  
  181.  Falls gewünscht, kann ein Listing vom Assembler erzeugt werden.
  182.  Es hat dann folgendes Format :
  183.  
  184.  nnnn xxxx yy yy yy   label   mne  operand
  185.  
  186.  nnnn  - Zeilennummer
  187.  xxxx  - Adresse
  188.  yy    - Code
  189.  label - Label, falls angegeben
  190.  mne   - Mnemonic
  191.  operand - Operand
  192.  
  193. =============================================================================== 
  194.  
  195.  Symbolliste
  196.  
  197.  Ebenfalls kann eine Symbolliste ausgegeben werden. Es werden jedoch immer
  198.  nur die ersten 10 Zeichen eines Symbols ausgegeben. Die Symbole werden
  199.  in der Reihenfolge ihres Vorkommens ausgegeben.
  200.  
  201. ===============================================================================
  202.  
  203.  Assembler Directiven
  204.  
  205. -------------------------------------------------------------------------------
  206.  
  207.  EQU
  208.  
  209.  Syntax : Label  EQU  Ausdruck
  210.  
  211.  EQU setzt den Wert von Label gleich dem Ergebnis von Ausdruck.
  212.  Der Ausdruck darf keine Vorwärts-Refernzen enthalten.
  213.  
  214. -------------------------------------------------------------------------------
  215.  
  216.  ORG
  217.  
  218.  Syntax :         ORG  Ausdruck
  219.  
  220.  ORG setzt die Adresse fest, ab welcher der Code Assembliert werden soll.
  221.  Der Ausdruck darf keine Vorwärts-Refernzen enthalten. Ein Label vor ORG
  222.  wird nicht korrekt behandelt, und sollte deswegen vermieden werden. Es
  223.  ist nur ein ORG zulässig. Dieses muß vor der ersten Codeerzeugenden Zeile
  224.  stehen.
  225.  
  226. -------------------------------------------------------------------------------
  227.  
  228.  DFB,DFW,DFA
  229.  
  230.  Syntax : <Label> DFx  Ausdruck <,Ausdruck...>
  231.  
  232.  DFx legen Konstanten im Speicher ab. Es sind mehrere Ausdrücke durch Komma
  233.  getrennt möglich.
  234.  DFB legt Byte ( Ausdruck MOD 256 ) Werte im Speicher ab. Zeichenketten
  235.  müssen zwichen ' stehen.
  236.  DFW legt Word Werte in der Reihenfolge Hi-Byte, Lo-Byte im Speicher ab.
  237.  DFA legt Word Werte in der Reihenfolge Lo-Byte, Hi-Byte im Speicher ab.
  238.  
  239. -------------------------------------------------------------------------------
  240.  
  241.  RES
  242.  
  243.  Syntax : <Label> RES  Ausdruck
  244.  
  245.  RES füllt 'Ausdruck' Bytes mit $FF auf.
  246.  
  247. -------------------------------------------------------------------------------
  248.  
  249.  INCLUDE
  250.  
  251.  Syntax : <Label> INCLUDE Dateiname
  252.  
  253.  Include fügt die Datei 'Dateiname' in den Quelltext ein.
  254.  
  255. -------------------------------------------------------------------------------
  256.  
  257.  OUTPUT
  258.  
  259.  Syntax :         OUTPUT Dateiname
  260.  
  261.  OUTPUT legt die Ausgabedatei für den Assemblierten Code fest.
  262.  
  263. -------------------------------------------------------------------------------
  264.  LIST
  265.  
  266.  Syntax :         LIST Dateiname
  267.  
  268.  LIST legt die Ausgabedatei für ein Listing fest.
  269.  Mit LIST con: wird das Listing auf den Bildschirm ausgegeben.
  270.  Mit LIST prn: wird das Listing auf den Drucker ausgegeben.
  271.  
  272. -------------------------------------------------------------------------------
  273.  
  274.  SYMBOL
  275.  
  276.  Syntax :         SYMBOL Dateiname
  277.  
  278.  SYMBOL legt die Ausgabedatei für eine Symbolliste fest.
  279.  Es Werden jedoch nur die Ersten 10 Zeichen eines Symbols ausgegeben.
  280.  Mit SYMBOL con: wird die Liste auf den Bildschirm ausgegeben.
  281.  Mit SYMBOL prn: wird die Liste auf den Drucker ausgegeben.
  282.  
  283. -------------------------------------------------------------------------------
  284.  
  285.  OPTION
  286.  
  287.  Syntax :         OPTION  opt <,opt...>
  288.  
  289.  Mit Option kann man veschiedene Optionen an bzw. ausschalten.
  290.  opt+ schaltet Die Option an, opt- wieder aus.
  291.  
  292.  Z - Zeropage Optimierung
  293.      Wo möglich wird die kurze Adressierung eingesetzt.
  294.      Standard ist an.
  295.  
  296.  B - Branch Optiemierung
  297.      Wo möglich wird JMP durch BRA ersetzt ( Nur bei 65C02 möglich )
  298.      Standard ist aus. Diese Optiemierung ist nur im 65c02 Modus aktiv.
  299.  
  300.  C - CMOS CPU
  301.      Mit C- lassen sie nur Befehle eines 6502 zu ( Standard ).
  302.      mit C+ sind zusätzlich auch noch die Befehle des 65C02
  303.      Prozessors zulässig.
  304.  
  305.  L - Listing
  306.      Mit L- und L+ können Bereiche fürs Listing ausgeschlossen werden.
  307.      Standard ist an.
  308.  
  309.  E - Expandieren
  310.      Mit E- werden Includefiles nicht mit gelistet.
  311.      Standard ist aus. 
  312.  
  313.  H - Hexcode
  314.      Der Assemblierte Code wird als Ascii Datei ausgegeben. Die ersten
  315.      vier Buchstaben sind Startadresse, die nächsten vier die Endadresse
  316.      des Codes ( Low Byte - High Byte )
  317.  
  318. -------------------------------------------------------------------------------
  319.  
  320.   FAIL
  321.  
  322.   Syntax :       FAIL
  323.  
  324.   Fail erzeugt einen Fehler. Dies kann bei Macros u.U. nützlich sein.
  325.  
  326. ===============================================================================
  327.  
  328.   Bedingtes Assemblieren
  329.  
  330.   Syntax :       IFC  Ausdruck1 Vergleich Ausdruck2
  331.                    .
  332.                    .
  333.                    Assemblerblock
  334.                    .
  335.                    .
  336.                  ENDC
  337.  
  338.   IFC..ENDC erlauben das bedingte Assemblieren eines Codeteils.
  339.   Ist Ausdruck1 Vergleich Ausdruck2 wahr, so wird der Quelltext
  340.   zwischen IFC und ENDC assembliert, andernfalls wird dieses Teil
  341.   Überlesen. IFC..ENDC Blöcke dürfen ineinander verschachtelt werden.
  342.  
  343.   Ausdruck1 und Ausdruck2 dürfen keine Vorwärtsreferenzen enthalten.
  344.   Als Vergleich sind =, #, < und > erlaubt.
  345.  
  346.  
  347. ===============================================================================
  348.  
  349.   Macros
  350.  
  351. -------------------------------------------------------------------------------
  352.  
  353.   Macrodefinition
  354.  
  355.   Syntax :   Name   MACRO
  356.                       .
  357.                       .
  358.                       Anweisungsblock
  359.                       .
  360.                       .
  361.                     ENDM
  362.  
  363.   MACRO leitet das Aufzeichnen eines Macros ein. ENDM beendet die
  364.   Aufzeichnung. 'Name' darf keine Directive oder Mnemonic sein.
  365.   Macros dürfen weitere Macroaufrufe enthalten. Ein Macro muß vor
  366.   seinen ersten Auruf Defieniert sein. Labels innerhalb eines Macros
  367.   sind nicht zulässig, Strukturblöcke dagegen sind zulässig.
  368.  
  369. -------------------------------------------------------------------------------
  370.  
  371.   Macroparameter
  372.  
  373.   Parameter werden innerhalb eines Macros mit \n aufgerufen.
  374.   Es sind max. 10 Parameter möglich (\0..\9). Parameter dürfen
  375.   nur im Operandenfeld stehen. \n wird durch Parameter n im Text
  376.   ersetzt.
  377.  
  378.   NARG oder narg ist ein vordeieniertes Symbol, daß die Anzahl der
  379.   übergebenen Parameter enthält.
  380.   
  381. -------------------------------------------------------------------------------
  382.  
  383.   Macroaufruf
  384.  
  385.   Syntax : <Label>   Name  <Parameter,...>
  386.  
  387.   Ein Macro wird aufgerufen, indem sein Name im Mnemonicfeld steht.
  388.   Die Parameter stehen im Operandenfeld. Als Parameter sind Rechen-
  389.   ausdrücke und Zeichenketten zulässig.
  390.  
  391. -------------------------------------------------------------------------------
  392.  
  393.   Macroabbruch
  394.  
  395.   Syntax :           MEXIT
  396.  
  397.   Durch MEXIT ist ein vorzeitiges verlassen des Macros möglich.
  398.  
  399.  
  400. ===============================================================================
  401.  
  402.   Strukturblöcke
  403.  
  404.   Strukturblöcke erlauben ein übersichtlicheres Programieren.
  405.   Strukturblöcke sind nicht mit bedingten Assemblieren zu verwechseln.
  406.  
  407.   Möglich sind :
  408.  
  409.   IF..ENDIF  -  Bedingte ausführung
  410.  
  411.   Syntax : <Label>    IF cond
  412.                          .
  413.                          Anweisungsblock
  414.                          .
  415.                       ENDIF
  416.  
  417.   Code   : <Label>    Bcc Label_0
  418.                        .
  419.                       Anweisungsblock
  420.                        .
  421.             Label_0   weiter im Text
  422.  
  423.   IF..ELSE..ENDIF - Bedingte Ausführung
  424.  
  425.   Syntax : <Label>    IF cond
  426.                          .
  427.                          Anweisungsblock
  428.                          .
  429.                       ELSE
  430.                          .
  431.                         Anweisungsblock
  432.                         .
  433.                       ENDIF
  434.  
  435.   Code   : <Label>    Bcc Label_0
  436.                        .
  437.                       Anweisungsblock
  438.                        .
  439.                       JMP Label_1
  440.             Label_0    .
  441.                       Anweisungsblock
  442.                        .
  443.             Label_1   weiter im Text
  444.  
  445.   DO..LOOP - Endlosschleife
  446.  
  447.   Syntax : <Label>    DO
  448.                        .
  449.                        Anweisungsblock
  450.                        .
  451.                       LOOP
  452.  
  453.   Code   : <Label>    .
  454.                       Anwiesungsblock
  455.                       .
  456.                       JMP <Label>
  457.  
  458.   REPEAT..UNTIL - Schleife
  459.  
  460.   Syntax : <Label>    REPEAT
  461.                          .
  462.                         Anweisungsblock
  463.                          .
  464.                       UNTIL cond
  465.  
  466.   Code   : <Label>    .
  467.                       Anweisungsblock
  468.                       .
  469.                       Bcc <Label>
  470.  
  471.   BEGIN..WHILE..WEND
  472.  
  473.   Syntax : <Label>    BEGIN
  474.                          .
  475.                         Anweisungsblock
  476.                          .
  477.                        WHILE cond
  478.                          .
  479.                         Anweisungsblock
  480.                          .
  481.                        WEND
  482.  
  483.   Code    : <Label>      .
  484.                        Anweisungsblock
  485.                          .
  486.                        bcc Label_0
  487.                          .
  488.                        Anweisungsblock
  489.                          .
  490.                        JMP <Label>
  491.              Label_0   weiter im Text
  492.  
  493.  
  494.   Als 'cond' gelten : EQ,NE,CS,CC,PL,MI,VC,VS.
  495.   Im Code wird dann ein Branch mit dem gegenteil eingesetzt.
  496.   Struckturblöcke können verschachtelt werden.
  497.  
  498. ===============================================================================
  499.